import { Ref, ref } from "vue";
import { useWatchPropsCleanup, watchProps } from "./watch";
import { useRoute, useRouter, Router } from 'vue-router';

/**
 * 持有 Vue Router 实例的引用。
 */
export const router: Ref<Router | null> = ref(null);

/**
 * 持有当前路由对象的引用。
 */
export const route = ref();

/**
 * 初始化路由监听属性。
 * 该函数在组件挂载时被调用，设置路由和路由器的引用，
 * 并为路由对象注册属性监听器。
 */
export const initWatchProps = () => {
    // 获取当前路由对象并赋值给 route 引用
    route.value = useRoute();
    // 获取路由器实例并赋值给 router 引用
    router.value = useRouter();

    /**
     * 注册
     * 为路由对象注册属性监听器，当路由变化时触发 'route:WATCH_PROPS' 事件
     */
    watchProps(route.value, 'route:WATCH_PROPS');

    /**
     * 卸载
     * 在组件卸载时清除所有属性监听器和事件
     */
    useWatchPropsCleanup();
}